Presentation and rendering of images and graphics on data processing systems and user terminals, such as computers, and in particular on mobile terminals have increased tremendously the last years. For example, three-dimensional (3D) graphics and images have a number of appealing applications on such terminals, including games, 3D maps and messaging, screen savers and man-machine interfaces.
A 3D graphics rendering process typically comprises three sub-stages. Briefly, a first stage, the application stage, creates several triangles. The corners of these triangles are transformed, projected and lit in a second stage, the geometry stage. In a third stage, the rasterization stage, images, often denoted textures, can be “glued” onto the triangles, increasing the realism of the rendered image. The third stage typically also performs sorting, using a z-buffer.
However, rendering of images and textures, and in particular 3D images and graphics, is a computationally expensive task in terms of memory bandwidth and processing power required for the graphic systems. For example, textures are costly both in terms of memory, the textures must be placed on or cached in fast on-chip memory, and in terms of memory bandwidth, a texture can be accessed several times to draw a single pixel.
In order to reduce the bandwidth and processing power requirements, an image (texture) encoding method or system is typically employed. Such an encoding system should result in more efficient usage of expensive on-chip memory and lower memory bandwidth during rendering and, thus, in lower power consumption and/or faster rendering.
Delp and Mitchell [1] developed a simple scheme, called block truncation coding (BTC) for image compression. Even though their applications were not texture compression per se, several of the other schemes described in this section are based on their ideas. Their scheme compressed grey scale images by considering a block of 4×4 pixels at a time. For such a block, two 8-bit grey scale values were stored, and each pixel in the block then used a single bit to index to one of these grey scales. This resulted in 2 bits per pixel (bpp).
A simple extension, called color cell compression (CCC), of BTC was presented by Campbell et al. [2]. Instead of using an 8-bit grey scale value, the 8-bit value is employed as an index into a color palette. This allows for compression of colored textures at 2 bpp. However, a memory lookup in the palette is required, and the palette is restricted in size.
The S3TC texture compression method by Iourcha et al. [3] is currently probably the most popular scheme. It is used in DirectX and there are extensions for it in OpenGL as well. Their work can be seen as a further extension of CCC. The block site for S3TC is 4×4 pixels that are compressed into 64 bits. Two base colors are stored as 16 bits each, and each pixel stores a two-bit index into a local color palette that consists of the two base colors and two additional colors in-between the base colors. This means that all colors lie on a line in RGB space. S3TC's compression rate is 4 bpp. One disadvantage of S3TC is that only four colors can be used per block.
Penney [4] introduces a radically different scheme that is used in the MBX graphics hardware platform for mobile phones. This scheme uses two low-resolution images and these are bilinearly upscaled during decompression. Each pixel also stores a blendfactor between these two upscaled images. Compression of 4 bpp and 2 bpp are described. 64 bits are used per block. The major disadvantage of Fenny's scheme, which makes it less attractive in real implementations, is that information is needed from neighboring image blocks during decompression, which severely complicates decompression.
PACKMAN is a recent texture compression method developed by Ström and Akenine-Möller [5]. It encodes a block of 2×4 texels (pixels) into 32 bits. Only one color is used per block, but in each pixel this color can be modified in intensity. The major goal of PACKMAN was to allow for minimal decompression complexity. In PACKMAN the chrominance is heavily quantized, which may introduce block artifacts.
In order to improve PACKMAN, Ström and Akenine-Möller developed an improved compression method denoted iPACKMAN//Ericsson Texture Compression (ETC) [6, 7]. In iPACKMAN/ETC two 2×4 image blocks are encoded in common, which allowed for differential encoding of the colors. This made it possible to have finer quantization of the colors, resulting in an increase in quality of about 3 dB. Hence, this compression method passed S3TC in terms of quality and is currently the highest quality texture compression method/system publicly known.
There is still a need to improve image compression and in particular in terms of compressing and decompressing problematic image blocks having certain color characteristics that cannot be efficiently handled by the prior art image processing schemes at a high quality. Such problematic image blocks include blocks having slowly varying transitions between two or more colors.